﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace LinkyPOS.Class
{
    class kasa
    {
        linkDataContext ly = new linkDataContext();

        private double genelhasilat;
        private double donemlikhasilat;
        private double gunlukhasilat;
        private double genelkredikarti;
        private double donemlikkredikarti;
        private double gunlukkredikarti;
        private double genelnakit;
        private double donemliknakit;
        private double gunluknakit;
        private double genelcari;
        private double donemlikcari;
        private double gunlukcari;
        private double genelmasraflar;
        private double donemlikmasraflar;
        private double gunlukmasraflar;
        private double yeninakit;
        private double yenivisa;
        private double eskinakit;
        private double eskivisa;
        private double toplamparca;
        private double toplammusteri;

        public double Genelhasilat { get { return genelhasilat; } set { genelhasilat = value; } }
        public double Donemlikhasilat { get { return donemlikhasilat; } set { donemlikhasilat = value; } }
        public double Gunlukhasilat { get { return gunlukhasilat; } set { gunlukhasilat = value; } }
        public double Genelkredikarti { get { return genelkredikarti; } set { genelkredikarti = value; } }
        public double Donemlikkredikarti { get { return donemlikkredikarti; } set { donemlikkredikarti = value; } }
        public double Gunlukkredikarti { get { return gunlukkredikarti; } set { gunlukkredikarti = value; } }
        public double Genelnakit { get { return genelnakit; } set { genelnakit = value; } }
        public double Donemliknakit { get { return donemliknakit; } set { donemliknakit = value; } }
        public double Gunluknakit { get { return gunluknakit; } set { gunluknakit = value; } }
        public double Genelcari { get { return genelcari; } set { genelcari = value; } }
        public double Donemlikcari { get { return donemlikcari; } set { donemlikcari = value; } }
        public double Gunlukcari { get { return gunlukcari; } set { gunlukcari = value; } }
        public double Genelmasraflar { get { return genelmasraflar; } set { genelmasraflar = value; } }
        public double Donemlikmasraflar { get { return donemlikmasraflar; } set { donemlikmasraflar = value; } }
        public double Gunlukmasraflar { get { return gunlukmasraflar; } set { gunlukmasraflar = value; } }

        public double Yeninakit { get { return yeninakit; } set { yeninakit = value; } }
        public double Yenivisa { get { return yenivisa; } set { yenivisa = value; } }
        public double Eskinakit { get { return eskinakit; } set { eskinakit = value; } }
        public double Eskivisa { get { return eskivisa; } set { eskivisa = value; } }


        public double Toplamparca   { get { return toplamparca; } set   { toplamparca = value; } }
        public double Toplammusteri { get { return toplammusteri; } set { toplammusteri = value; } }

        public kasa()
        {
            genelhasilat = 0.00;
            donemlikhasilat = 0.00;
            gunlukhasilat = 0.00;
            genelkredikarti = 0.00;
            donemlikkredikarti = 0.00;
            gunlukkredikarti = 0.00;
            genelnakit = 0.00;
            donemliknakit = 0.00;
            gunluknakit = 0.00;
            genelcari = 0.00;
            donemlikcari = 0.00;
            gunlukcari = 0.00;
            genelmasraflar = 0.00;
            donemlikmasraflar = 0.00;
            gunlukmasraflar = 0.00;
        }

        //----------------Toplam parca sayısı---------------
        public void toplamparcasayisi(DateTime tarih)
        {
            var cariSum = (from top in ly.siparisdetaylaris
                               join sip in ly.siparislers on top.sipariskodu equals sip.sipariskodu
                               where sip.alimtarihi == tarih && (sip.durum ==1 || sip.durum==2 || sip.durum == 3 || sip.durum == 4 || sip.durum==5)
                               select top).Count();

            if (cariSum != null)
            {
                toplamparca = (double)cariSum;
            }
        }

        public void toplamsiparissayisi(DateTime tarih)
        {
            var cariSum = (from top in ly.siparislers
                           where top.alimtarihi == tarih && (top.durum == 1 || top.durum == 2 || top.durum == 3 || top.durum == 4 || top.durum == 5)
                                select top).Count();

            if (cariSum != null)
            {
                toplammusteri = (double)cariSum;
            }
        }

        // programın ilk günden itibaren yaptığı toplam işi getirir
        public void genelhasilatgetir()
        {
            try
            {

       
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(net) from siparisler ", sqlcon);

            sqlcon.Open();
            if (sqlcmd.ExecuteScalar() != null)
            {
                genelhasilat = Convert.ToDouble(sqlcmd.ExecuteScalar());
            }
            sqlcon.Close();
            }
            catch (Exception)
            {

                genelhasilat = 0.00;
            }

        }

        // bilirli bir tarhi aralıağında yapılan toplam işi getirir
        public void donemlikhasilatgetir(DateTime ilktarih, DateTime sontarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.alimtarihi >= ilktarih && sip.alimtarihi <= sontarih 
                           select sip.net).Sum();



            if (cariSum != null)
            {
                donemlikhasilat = (double)cariSum;
            }

        }

        // belirli bir güne ait toplam hasilati getirir
        public void Gunlukhasilatgetir(DateTime tarih)
        {

            var cariSum = (from sip in ly.siparislers
                           where sip.alimtarihi == tarih && (sip.durum == 1 || sip.durum == 2 || sip.durum == 3 || sip.durum == 4 || sip.durum == 5)
                           select sip.net).Sum();




            if (cariSum != null)
            {
                gunlukhasilat = (double)cariSum;
            }
        }



        //-----------------------KREDİ KARTI RAKKAMLARI------------------------------
        // toplam  yapılan kredi kartı tutarını getiren metod

        public void Toplamkredikarti()
        {
            try
            {

        
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(net) from siparisler where durum=3 or durum=5 or durum=7", sqlcon);


            sqlcon.Open();
            if (sqlcmd.ExecuteScalar() != null)
            {
                genelkredikarti = Convert.ToDouble(sqlcmd.ExecuteScalar());
            }
            sqlcon.Close();
            }
            catch (Exception)
            {

                genelkredikarti=0.00;
            }
        }

        // belirli bir  döneme ait kredi kartı satışlarının toplam tutarını verir

        public void DonemlikKrediKarti(DateTime ilktarih, DateTime sontarih)
        {
           
   
                  var cariSum = (from sip in ly.siparislers
                                where sip.odemetarihi >= ilktarih && sip.odemetarihi <=sontarih
                                select sip.net).Sum();




                  if (cariSum != null)
                  {
                      donemlikkredikarti = (double)cariSum;
                  }
        }

        // belirli bir güne ait toplam kredikarti toplamini getirir
        public void Gunlukkredikartigetir(DateTime tarih)
        {

            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi == tarih 
                           select sip.net).Sum();

            if (cariSum != null)
            {
                gunlukkredikarti = (double)cariSum;
            }
         
        }



        //--------------------- NAKİT RAKKAMLARI -------------------------------------

        // toplam yapılmış nakit rakkamlarını getirir
        public  void ToplamNakitgetir()
        {
            try
            {

        
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(net) from siparisler where durum=2 or durum=4 or durum=6", sqlcon);
          

            sqlcon.Open();
           
                genelnakit = Convert.ToDouble(sqlcmd.ExecuteScalar());
           
            sqlcon.Close();
            }
            catch (Exception)
            {

                genelnakit=0.00;
            }

        }

        // belirli bir döneme ait nakit ödemeleri gösterir
        public  void DonemlikNakitGetir(DateTime ilktarih, DateTime sontarih)
        {
   var cariSum = (from sip in ly.siparislers
                                where sip.odemetarihi >= ilktarih && sip.odemetarihi <=                                sontarih
                                select sip.net).Sum();





   if (cariSum != null)
   {
       donemliknakit = (double)cariSum;
   }
        }

        public void DonemlikNakitGetir(DateTime tarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi >= tarih  && (sip.durum==2 || sip.durum==4 || sip.durum==6)
                           select sip.net).Sum();

            if (cariSum != null)
            {
                donemliknakit = (double)cariSum;
            }
        }
        // belirli bir güne ait toplam nakit alınanı getirir
        public  void GunlukNakitGetir()
        {
            try
            {

         
           
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(net) from siparisler where odemetarihi=@tarih and (durum=2 or durum=4 or durum=6)", sqlcon);
            sqlcmd.Parameters.AddWithValue("@tarih", dateandunit.sadecetarih());
            //sqlcmd.Parameters.AddWithValue("@durum", /* buraya kredi Nakit ALım Kodlari kodlari eklenecek*/);

            sqlcon.Open();
         
                gunlukhasilat = Convert.ToDouble(sqlcmd.ExecuteScalar());
          
            sqlcon.Close();
            }
            catch (Exception)
            {

                gunlukhasilat=0.00;
            }
        }


        //------------------------ eski yeni  nakit visa---------------------------------------

        public void yeninakitbul(DateTime tarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi == tarih && (sip.durum == 4 || sip.durum==2)
                           select sip.net).Sum();





            if (cariSum != null)
            {
                yeninakit = (double)cariSum;
            }
        
        
        }

        public void eskinakitbul(DateTime tarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi == tarih && sip.durum == 6
                           select sip.net).Sum();





            if (cariSum != null)
            {
                eskinakit = (double)cariSum;
            }
        }

        public void yenivisabul(DateTime tarih)
        {

            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi == tarih && (sip.durum == 5 || sip.durum == 3)
                           select sip.net).Sum();




            if (cariSum!=null)
            {
                yenivisa = (double)cariSum;
            }
            
        
        }

        public void eskivisabul(DateTime tarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.odemetarihi == tarih && sip.durum == 7
                           select sip.net).Sum();



            if (cariSum != null)
            {

                eskivisa = (double)cariSum;
            }
        }


        //----------------------- CARİ RAKKAMLAR ---------------------------------------

        // An iti bari geçmiş dönem ve bugüne ait toplam yapılmış cari tutarı getirir
        public void ToplamCarigetir()
        {
            try
            {

         
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(net) from siparisler where durum=1", sqlcon);
            //sqlcmd.Parameters.AddWithValue("@durum",/* buraya cari kodlari eklenecek*/ );

            sqlcon.Open();
          
                genelcari = Convert.ToDouble(sqlcmd.ExecuteScalar());
           
            sqlcon.Close();
            }
            catch (Exception)
            {

                genelcari=0.00;
            }
        }

        // belirli bir döneme ait cari miktari  gösterir örn: 2 gün öncesi ve bugün olan tüm cari tutar 
        public void DonemlikCariGetir(DateTime ilktarih, DateTime sontarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.alimtarihi >= ilktarih && sip.alimtarihi <= sontarih
                           select sip.net).Sum();


            if (cariSum != null)
            {

                donemlikcari = (double)cariSum;
            }

        }

        public void DonemlikCariGetir(DateTime tarih)
        {
            var cariSum = (from sip in ly.siparislers
                           where sip.alimtarihi >= tarih
                           select sip.net).Sum();


            if (cariSum != null)
            {

                donemlikcari = (double)cariSum;
            }

        }
        // belirli bir güne ait toplam cari tutar getirir bu gün yapılan cari tutar

        public void GunlukCariGetir(DateTime tar)
        {
            try
            {


                var cariSum = (from sip in ly.siparislers
                               where sip.alimtarihi == tar && sip.durum==1
                               select sip.net).Sum();


                if (cariSum != null)
                {

                    gunlukcari = (double)cariSum;
                }

            }
            catch (Exception)
            {

                gunlukcari=0.00;
            }
        }



        // ---------------------- MASRAF RAKKAMLARI --------------------------------------------------

        // An iti bari geçmiş dönem ve bugüne ait toplam yapılmış Masrafların tutarı getirir
        public void Toplammasrafgetir()
        {
            try
            {

          
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  sum(tutari) from masraflar ", sqlcon);


            sqlcon.Open();
          
                genelmasraflar = Convert.ToDouble(sqlcmd.ExecuteScalar());
          
            sqlcon.Close();
            }
            catch (Exception)
            {
                genelmasraflar = 0.00;
                
            }
        }

        // belirli bir döneme ait masraf tutarını   gösterir örn: 2 gün öncesi ve bugün olan tüm masraflar tutar 
        public void DonemlikmasrafGetir(DateTime ilktarih, DateTime sontarih)
        {

            var cariSum = (from sip in ly.masraflars
                             where sip.tarih >= ilktarih && sip.tarih <= sontarih
                             select sip.tutari).Sum();

            if (cariSum != null)
            {
                donemlikmasraflar = (double)cariSum;
            }


        }


        // belirli bir güne ait toplam masraf tutarını getirir bu gün yapılan cari tutar

        public void Gunlukmasrafgetir()
        {
            try
            {

           
            SqlConnection sqlcon = connection.baglanti;
            SqlCommand sqlcmd = new SqlCommand("select  SUM(tutari) from masraflar where tarih=@tarih ", sqlcon);
            sqlcmd.Parameters.AddWithValue("@tarih", dateandunit.sadecetarih());

            sqlcon.Open();
           
                gunlukmasraflar = Convert.ToDouble(sqlcmd.ExecuteScalar());  
          
            

            sqlcon.Close();
            }
            catch (Exception)
            {

                gunlukmasraflar=0.00;
            }
        }


        public void Gunlukmasrafgetir(DateTime tar)
        {
            try
            {
                try
                {
                    var gmasraf = (from m in ly.masraflars
                                   where m.tarih==tar
                                   select m.tutari).Sum();

                    gunlukmasraflar = Convert.ToDouble(gmasraf);
                }
                catch (Exception)
                {


                }

            }
            catch (Exception)
            {

                gunlukmasraflar = 0.00;
            }
        }
        // belirli bir güne ait toplam masraf tutarını getirir bu gün yapılan cari tutar
        public List<masraflar> guneaitmasraflar(DateTime tar)
        {
            List<masraflar> masr = (from mas in ly.masraflars
                                    where mas.tarih == tar
                                    select mas).ToList();

            return masr;
        
        }

        public List<masraflar> donemaitmasraflar(DateTime tar,DateTime tar2)
        {
            List<masraflar> masr = (from mas in ly.masraflars
                                    where mas.tarih<=tar2 && mas.tarih>=tar
                                    select mas).ToList();

            return masr;

        }

        public List<masraflar> toplamaaitmasraflar()
        {
            List<masraflar> masr = (from mas in ly.masraflars
                                    
                                    select mas).ToList();

            return masr;

        }

        //-----------------------------RAPORLAR---------------------------------------------------------

        // bu bölüm çeşitli  filtrelemele sonucunda çıkarılacak rapor listelerini içermektedir

        // raporlar sayfasında gün başı yapılınca oluşturulmuş tarih veya dönemlik raporları getirir

        public List<kasaraporlari> tumraporlars()
        {
            List<kasaraporlari> kr = (from krap in ly.kasaraporlaris
                                      select krap).ToList();


            return kr;

        }
        // bir gune ait kasa raporu
        public List<kasaraporlari> tumraporlars(DateTime tar)
        {
            List<kasaraporlari> kr = (from krap in ly.kasaraporlaris
                                      where krap.tarih== tar
                                      select krap).ToList();


            return kr;

        }

        public List<kasaraporlari> tumraporlars(DateTime tar1, DateTime tar2)
        {
            List<kasaraporlari> kr = (from krap in ly.kasaraporlaris
                                      where krap.tarih<=tar2 && krap.tarih>=tar1
                                      select krap).ToList();


            return kr;

        }


    }
}
